<?php

/**
 * @category   Mediad2
 * @package    Mediad2_Service
 */
class Mediad2_Service_Admin_Version extends Mediad2_Service_Abstract
{
	/**
	 * 初始化
	 */
	public function init()
	{
		$this->setMapper('Mediad2_Mapper_Version');
		$this->setModel('Mediad2_Model_Version');
	}
	
	/**
	 * check version
	 * @param int	$versionType	版本类型
	 * @param string $clientVersion 终端版本号
	 * @return Mediad2_Model_Result
	 */
	public function checkVersion($versionType, $clientVersion)
	{
		//获取数据库中最新版本
		$where = 'type = ' . $versionType;
		$order = 'vid desc';
		$data = null;
		$result = $this->findBy($where,$order);
		//判断版本
		if ($result->getCode()==$result::CODE_FAILURE) {
			$data['update'] = Mediad2_Model_Version::ISUPDATE_NOTNEED;//不需要更新
		} else {
			$model 			= $result->getData();
			$serverVersion 	= $model->getVersion();	//服务器端版本号
			$isUpdate 		= $model->getIsupdate();
			$fids 			= $model->getFid();
			$desc 			= $model->getDesc();
	
			if (empty($clientVersion)) {
				//如果终端版本为空
				$data['update'] = Mediad2_Model_Version::ISUPDATE_ENFORCE;//强迫更新
			} else {
				//如果终端版本不为空，则需要判断版本
				$arrDV = explode('.', $clientVersion);
				$arrSV = explode('.', $serverVersion);
				//判断大版本号AA
				if((int)$arrDV[0] > (int)$arrSV[0]) {
					//终端大版本号超过服务器大版本号，不需要更新
					$data['update'] = Mediad2_Model_Version::ISUPDATE_NOTNEED;//不需要更新
				} elseif ((int)$arrDV[0] == (int)$arrSV[0]) {
					//终端版本==服务器版本，还需要判断小版本号
					if((int)$arrDV[1]>=(int)$arrSV[1]) {
						//终端小版本号超过服务器小版本号，不需要更新
						$data['update'] = Mediad2_Model_Version::ISUPDATE_NOTNEED;//不需要更新
					} else {
						//终端小版本号小于服务器小版本号，需要更新
						$data['update'] = $isUpdate;//不需要更新
					}
				} else {
					//终端大版本号<服务器大版本号，需要强制更新
					$data['update'] = Mediad2_Model_Version::ISUPDATE_ENFORCE;
				}
			}
			if ($data['update'] <> Mediad2_Model_Version::ISUPDATE_NOTNEED) {
				$data['files'] = $this->getVersionFiles($fids);
				$data['desc'] = $desc;
			} else {
				$data['files'] = '';
				$data['desc'] = '';
			}
		}
	
		return $this->returnResult($result::CODE_SUCCESS,null,$data);
	
	}
	
	/**
	 * @author vincent [原文件将另存为N.bak]
	 * @param 原apk文件		$apk
	 * @param 新apk文件 		$new
	 * @param apk文件目录 		$source
	 * @param 版本文件备份目录  	$target
	 * @param APK名称 	  	$apkname
	 */
	public function backup($apk,$new,$source,$target,$num,$apkname)
	{
		//将原有APK文件进行备份
		$flag = copy($apk, $apk.".bak");		
		if(!$flag)return $flag;
		
		//将上传的文件进行版本备份
		$backuppath = sprintf("%s\\[%s][ver-%s]%s",$target,date("Y-m-d"),$num,$apkname);
		$flag = copy($new, $backuppath);		
		if(!$flag)return $flag;
		
		//将上传的文件移至apk目录
		$flag = copy($new, $apk);
		return $flag;
	}
	
	/**
	 * get version files
	 * @param array|string $fids
	 * @return string 
	 */
	private function getVersionFiles($fids)
	{
		$files_str = '';
		
		if (is_array($fids)) {
			$strFids = implode(',', $fids);
		} else {
			$strFids = $fids;
		}
		
		$serviceFiles = new Mediad2_Service_Admin_Files();
		$where = "fid in ($strFids)";
		$order = "fid asc";
		$result = $serviceFiles->fetchAll(null,null,$where,$order,true);
		if ($result->getCode() == $result::CODE_SUCCESS) {
			$data = $result->getData();
			$arrFiles = array();
			foreach ($data as $key => $files) {
				foreach ($files AS $ffk => $ffv) {
					switch ($ffk) {
						case 'filename':
						case 'filetype':
						case 'fileimg':
						case 'filesize':
						case 'filepath':
						case 'filedesc':
							break;
						default:
							unset($files[$ffk]);
							break;
					}
				}
				$files_str .= "<file>";
				$files_str .= $this->getFunctions()->array2xml($files);
				$files_str .= "</file>";
			}
		}
		
		return $files_str;
	}
	
}